package demo1230.pm;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/*
  TCP通信:
  服务器端ServerSocket类:
  构造方法:
  public ServerSocket_01(int port)throws IOException
  使用该构造方法在创建ServerSocket对象时，
  就可以将其绑定到一个指定的端口号上（参数port就是端口号）。

  成员方法:
  1.public Socket accept()throws IOException
  等待接收一个客户端对象.程序会处于监听的状态.

  2.public void close()throws IOException
    关闭资源.

  实现步骤:
  1.创建一个服务器端(ServerSocket_01)对象 ss
  2.使用ss对象中的accept方法接收一个Socket客户端对象s.
  3.使用客户端对象s中的getInputStream方法,获取一个网络字节输入流对象is
  4.使用is读取客户端发送给服务端的数据.
  5.使用客户端对象s中的getOutputStream方法,获取一个网络字节输出流对象os.
  6.使用网络字节输出流对象,写一个数据给客户端.
  7.关闭s,ss资源.

 */
public class Demo_01 {
    public static void main(String[] args) {
//        创建一个服务端对象,绑定端口号
        try (ServerSocket ss = new ServerSocket(8888)) {
//            接收一个客户端对象
            Socket socket = ss.accept();
            //3.使用客户端对象s中的getInputStream方法,获取一个网络字节输入流对象is
            InputStream is = socket.getInputStream();

            byte[] bs = new byte[1024];
            //使用is读取客户端发送给服务端的数据.
            int  read= is.read(bs);
            System.out.println(new String(bs,0,read));

//5.使用客户端对象s中的getOutputStream方法,获取一个网络字节输出流对象os.
            OutputStream os = socket.getOutputStream();
//           6.使用网络字节输出流对象,写一个数据给客户端.
            os.write("王老师,你看我的鞋好看不?".getBytes());

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
